package cn.trigram.json.annotation;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
 * {@link java.math.BigDecimal} 的jackson格式化
 * <br/>
 * 提供{@link Model} 预设格式处理，也可通过{@link #pattern()}使用自定义格式
 *
 * @version 1.0.0
 * @date 2022/08/22 14:00:27
 * @since 1.0.0
 */
@Documented
@Target({FIELD})
@Retention(RUNTIME)
public @interface BigNumberFormat {
    /**
     * 是否使用jackson 自带的。一旦使用自带的，其它配置全部忽视
     *
     * @return boolean
     */
    boolean useJackson() default false;

    /**
     * 预设模式；如果是{@link Model#CUSTOM} 模式，需要设置其它自定义配置
     *
     * @return {@link Model }
     */
    Model model() default Model.DEFAULT;

    /**
     * 自定义配置：格式参考 {@link java.text.DecimalFormat}；此配置优先
     *
     * @return {@link String }
     */
    String pattern() default "";

    /**
     * 小数位，oracle最大[-87,127]位
     *
     * @return int
     */
    int scale() default 127;

    /**
     * 是否去除多余零
     *
     * @return boolean
     */
    boolean stripTrailingZeros() default true;


    enum Model {
        /**
         * 默认的正常数学的数值显示，不限制小数位，只去除多余零
         */
        DEFAULT,
        /**
         * 金额元的显示，小数位两位，保留多余零
         */
        YUAN,
        /**
         * 金额万元显示，小数位六位，去除多余零
         */
        TEN_THOUSAND_YUAN,
        /**
         * 金额元千分位显示
         */
        YUAN_THOUSANDS,
        /**
         * 金额万元千分位显示
         */
        TEN_THOUSAND_YUAN_THOUSANDS,

        /**
         * 百分比数值，原数值自动乘100，不带符号
         */
        PERCENTAGE,

        /**
         * 百分比数值，原数值自动乘100，带%符号
         */
        PERCENTAGE_WITH_SYMBOL,

        /**
         * 自定义显示，可以指定scale 和 stripTrailingZeros
         */
        CUSTOM,
    }
}
